﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Ferreteria.Forms.GenerarRemito;
using System.Globalization;

namespace Ferreteria.Forms
{
    public partial class FrmGenerarRemito : Form
    {
        int ClientID;
        public DataTable dtLineaRemito;
        public DataTable dtLineaNuevoRemito;
        public DataTable dtLineaImpresionRemito;
        public static string TipoRemito;
        DisancoEntities context;
        LineaVenta[] arraylnremito;
        LineaVenta[] arraylnventa;
        LineaVentaAdicional[] arraylnventaad;
        LineaVentaAdicional[] arraylnremitoad;
        public int Saldofila;
        int VentaID;
        public static int nuevacant;
        int autorizacionId;
        long numeroRemitoInicial;
        long numeroRemitoFinal;
        RemitoV RemitoImprimir;
        RemitoVA RemitoImprimirVA;
        int cantRemitos;
        long NroRemito;
        int lnremito;
        int i;
        int cantlineasxremito;
        int cantRemRestantes;
        bool PrimeraVez;
        int saldo = 0;
        bool habilitado = false;
        
        public FrmGenerarRemito()
        {
            InitializeComponent();
            btnGenNuevoRemito.Enabled = false;
            btnBuscarComprobante.Enabled = true;
            btnGuardarRemito.Enabled = false;
            context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);
            dtLineaRemito = new DataTable();
            dtLineaRemito.Columns.Add("id");
            dtLineaRemito.Columns.Add("Codigo Art.");
            dtLineaRemito.Columns.Add("Articulo");
            dtLineaRemito.Columns.Add("Cantidad Vendida");
            dtLineaRemito.Columns.Add("Retirado en otros Remitos"); 
            dtLineaRemito.Columns.Add("Saldo a Retirar");
            // controlar q existan Remitos en autorizaciones
            var prueba = context.Autorizaciones.Where(c => c.autorizacion_estado == true && c.autorizacion_tipo_comp == "R");

            if (prueba.Count() == 0)
            {
                MessageBox.Show("No existe ninguna autorizacion activa para Remitos", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                habilitado = false;
               
            }
            else
                habilitado = true;
            
        }
              
        private void FrmGenerarRemito_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F4)
            {
                e.Handled = true;
                this.btnBuscarComprobante_Click_1(sender, e);
            }  
            else
                if (e.KeyCode == Keys.F5)
                {
                    e.Handled = true;
                    this.btnEditarCantArtRem_Click(sender, e);
                }

        }

        private void btnSalir_Click_1(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnBuscarComprobante_Click_1(object sender, EventArgs e)
        {

            if (habilitado == true)
            {
                Forms.FrmBusComprobante BuscarCompr = new FrmBusComprobante();
                BuscarCompr.ShowDialog();

                if (BuscarCompr.ComprobanteSelec != null) // Si el remito es uno OFicial
                {
                    TipoRemito = "R";
                    txtbCliNombre.Text = BuscarCompr.ComprobanteSelec.Clientes.cliente_nombre;
                    VentaID = BuscarCompr.ComprobanteSelec.id_venta;

                    ClientID = BuscarCompr.ComprobanteSelec.cliente_id;
                    lblComprTipo.Text = BuscarCompr.ComprobanteSelec.venta_tipo_comprobante;
                    lblComprNroIni.Text = BuscarCompr.ComprobanteSelec.venta_nro_inicio.ToString("0000-00000000");
                    dtimepickerFechaVta.Value = BuscarCompr.ComprobanteSelec.venta_fecha.Date;

                    lblMontoVta.Text = '$' + Convert.ToString(Math.Round(Convert.ToDecimal(BuscarCompr.ComprobanteSelec.venta_monto), 2));


                    context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);
                    bool bandera = false;
                    int nrolnvtas = 0;
                    int i = 0;

                    nrolnvtas = BuscarCompr.ComprobanteSelec.LineaVenta.Count(); //Cuento la cantidad de Lineas de la Venta
                    arraylnventa = new LineaVenta[nrolnvtas];
                    arraylnremito = new LineaVenta[nrolnvtas];

                    foreach (LineaVenta LineasVta in BuscarCompr.ComprobanteSelec.LineaVenta)
                    {
                        arraylnventa[i] = LineasVta; // arreglo de lineas de venta
                        arraylnremito[i] = arraylnventa[i];
                        i = i + 1;
                    }

                    foreach (RemitoV Remito in context.RemitoV) // Busco todos los remitos emitidos 
                    {
                        if (Remito.remito_estado == Clases.Estado.Emitida)
                        {
                            if (Remito.id_venta == BuscarCompr.ComprobanteSelec.id_venta) //Si el Remito es de la Venta buscada

                                bandera = true;

                            foreach (var linea in Remito.RemitoLinea)  //Recorro todos las lineas del Remito  
                            {
                                for (int k = 0; k < nrolnvtas; k++) // busco en el arreglo lnventa el articulo de esta linea del Remito
                                {
                                    if (arraylnventa[k].art_id == linea.art_id)
                                    {
                                        arraylnventa[k].cantidad_venta = (arraylnventa[k].cantidad_venta - linea.remlinea_cantidad);
                                        // Voy restando las cantidades que se entregaron en otros remitos de cada articulo en el array lnventa
                                    }
                                }
                            }
                        }
                    }

                    dtLineaRemito.Rows.Clear();
                    for (int k = 0; k < nrolnvtas; k++)
                    {
                        DataRow filaLineaRemito = dtLineaRemito.NewRow();
                        LineaVenta LinVta = null;
                        int cantidadretirada = 0;
                        int idartlinea = arraylnventa[k].art_id;

                        filaLineaRemito["id"] = idartlinea;
                        filaLineaRemito["Codigo Art."] = arraylnventa[k].Articulos.art_codigo;
                        filaLineaRemito["Articulo"] = arraylnventa[k].Articulos.art_nombre;

                        LinVta = context.LineaVenta.FirstOrDefault(ln => ln.id_venta == BuscarCompr.ComprobanteSelec.id_venta & ln.art_id == idartlinea);
                        if (LinVta != null)
                        {
                            filaLineaRemito["Cantidad Vendida"] = LinVta.cantidad_venta;
                        }

                        if (bandera == true)
                        {
                            cantidadretirada = Convert.ToInt32(arraylnventa[k].cantidad_venta);
                            filaLineaRemito["Retirado en otros Remitos"] = Convert.ToInt32(LinVta.cantidad_venta - cantidadretirada);

                            filaLineaRemito["Saldo a Retirar"] = cantidadretirada;
                        }
                        else
                        {
                            cantidadretirada = 0;
                            filaLineaRemito["Retirado en otros Remitos"] = cantidadretirada;

                            filaLineaRemito["Saldo a Retirar"] = Convert.ToInt32(LinVta.cantidad_venta - cantidadretirada);
                        }
                        dtLineaRemito.Rows.Add(filaLineaRemito);
                    }
                }
                else
                    if (BuscarCompr.ComprobanteXSelec != null) // Si el remito es para un COmprobante X
                    {
                        TipoRemito = "RX";
                        txtbCliNombre.Text = BuscarCompr.ComprobanteXSelec.Clientes.cliente_nombre;
                        VentaID = BuscarCompr.ComprobanteXSelec.va_id;

                        ClientID = BuscarCompr.ComprobanteXSelec.cliente_id;
                        lblComprTipo.Text = "X";
                        lblComprNroIni.Text = BuscarCompr.ComprobanteXSelec.va_nro_comp_ini.ToString("0000-00000000");
                        dtimepickerFechaVta.Value = BuscarCompr.ComprobanteXSelec.va_fecha;
                        lblMontoVta.Text = '$' + Convert.ToString(Math.Round(Convert.ToDecimal(BuscarCompr.ComprobanteXSelec.va_monto), 2));

                        context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);
                        bool bandera = false;
                        int nrolnvtas = 0;
                        int i = 0;

                        nrolnvtas = BuscarCompr.ComprobanteXSelec.LineaVentaAdicional.Count();//Cuento la cantidad de Lineas de la Venta
                        arraylnventaad = new LineaVentaAdicional[nrolnvtas];
                        arraylnremitoad = new LineaVentaAdicional[nrolnvtas];

                        foreach (LineaVentaAdicional LineasVtaAd in BuscarCompr.ComprobanteXSelec.LineaVentaAdicional)
                        {
                            arraylnventaad[i] = LineasVtaAd; // arreglo de lineas de venta
                            arraylnremitoad[i] = arraylnventaad[i];
                            i = i + 1;
                        }

                        foreach (RemitoVA RemitoVA in context.RemitoVA) // Busco todos los remitos emitidos 
                        {
                            if (RemitoVA.estado == Clases.Estado.Emitida)
                            {
                                if (RemitoVA.ra_id == BuscarCompr.ComprobanteXSelec.va_id) //Si el Remito es de la Venta buscada

                                    bandera = true;

                                foreach (var linea in RemitoVA.LineaRemitoVA)  //Recorro todos las lineas del Remito  
                                {
                                    for (int k = 0; k < nrolnvtas; k++) // busco en el arreglo lnventa el articulo de esta linea del Remito
                                    {
                                        if (arraylnventaad[k].art_id == linea.art_id)
                                        {
                                            arraylnventaad[k].linva_cant = (arraylnventaad[k].linva_cant - linea.cantidad);
                                            // Voy restando las cantidades que se entregaron en otros remitos de cada articulo en el array lnventa
                                        }
                                    }
                                }
                            }
                        }

                        dtLineaRemito.Rows.Clear();

                        for (int k = 0; k < nrolnvtas; k++)
                        {
                            DataRow filaLineaRemito = dtLineaRemito.NewRow();
                            LineaVentaAdicional LinVtaAD = null;
                            int cantidadretirada = 0;
                            int idartlinea = arraylnventaad[k].art_id;

                            filaLineaRemito["id"] = idartlinea;
                            filaLineaRemito["Codigo Art."] = arraylnventaad[k].Articulos.art_codigo;
                            filaLineaRemito["Articulo"] = arraylnventaad[k].Articulos.art_nombre;

                            LinVtaAD = context.LineaVentaAdicional.FirstOrDefault(ln => ln.va_id == BuscarCompr.ComprobanteXSelec.va_id & ln.art_id == idartlinea);
                            if (LinVtaAD != null)
                            {
                                filaLineaRemito["Cantidad Vendida"] = LinVtaAD.linva_cant;
                            }

                            if (bandera == true)
                            {
                                cantidadretirada = Convert.ToInt32(arraylnventaad[k].linva_cant);
                                filaLineaRemito["Retirado en otros Remitos"] = Convert.ToInt32(LinVtaAD.linva_cant - cantidadretirada);

                                filaLineaRemito["Saldo a Retirar"] = cantidadretirada;
                            }
                            else
                            {
                                cantidadretirada = 0;
                                filaLineaRemito["Retirado en otros Remitos"] = cantidadretirada;

                                filaLineaRemito["Saldo a Retirar"] = Convert.ToInt32(LinVtaAD.linva_cant - cantidadretirada);
                            }
                            dtLineaRemito.Rows.Add(filaLineaRemito);

                        }
                    }
                dgvLineasRemito.DataSource = dtLineaRemito;

                dgvLineasRemito.Columns["id"].Visible = false;
                dgvLineasRemito.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                dgvLineasRemito.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                dgvLineasRemito.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                dgvLineasRemito.Columns["Articulo"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

                btnGenNuevoRemito.Enabled = true;
            }
                
        }

        private void btnGenNuevoRemito_Click(object sender, EventArgs e)
        {
            btnBuscarComprobante.Enabled = false;
            btnGuardarRemito.Enabled = true;
            context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);
            
            CargarGrillaNuevoRemito();
            PrimeraVez = true;
            Clientes Client = context.Clientes.FirstOrDefault(cli => cli.cliente_id.Equals(ClientID));
            txtbClientNvoRem.Text = Client.cliente_nombre;
            lblNVOcomptipo.Text = lblComprTipo.Text;
            lblNVOCompNro.Text = lblComprNroIni.Text;
            lblNVOCompMonto.Text = lblMontoVta.Text;
            tabControl1.SelectedTab = NuevoRemito;
        }

        private void CargarGrillaNuevoRemito()
        {
            context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);

            dtLineaNuevoRemito = new DataTable();
            dtLineaNuevoRemito.Columns.Add("id");
            dtLineaNuevoRemito.Columns.Add("Codigo Art.");
            dtLineaNuevoRemito.Columns.Add("Articulo");
            dtLineaNuevoRemito.Columns.Add("Cantidad Vendida");
            dtLineaNuevoRemito.Columns.Add("Retirado en otros Remitos");
            dtLineaNuevoRemito.Columns.Add("Cantidad");
            dtLineaNuevoRemito = dtLineaRemito;
            
            int i = 0;
            while (i < dtLineaNuevoRemito.Rows.Count)
            {
                DataRow fila = dtLineaRemito.Rows[i];
                int cant = Convert.ToInt32(fila["Saldo a Retirar"]);
                if (cant < 0 | cant == 0)
                    dtLineaNuevoRemito.Rows.RemoveAt(i);
                else
                    i = i + 1;
            }

            if (dtLineaNuevoRemito.Rows.Count == 0)
            {
                MessageBox.Show("Todas los cantidades de los Articulos de esta Venta han sido Retirados en otros Remitos", "Disanco Sanitarios", MessageBoxButtons.OK, MessageBoxIcon.Information);
                this.Close();
            }
            else
            {
                dgvNuevoRemito.DataSource = dtLineaNuevoRemito;


                dgvNuevoRemito.Columns["id"].Visible = false;
                dgvNuevoRemito.Columns["Cantidad Vendida"].Visible = false;
                dgvNuevoRemito.Columns["Retirado en otros Remitos"].Visible = false;
                dgvNuevoRemito.Columns["Saldo a Retirar"].HeaderText = "Cantidad";

                dgvNuevoRemito.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                dgvNuevoRemito.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                dgvNuevoRemito.Columns["Articulo"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            }
        }
        
        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            int fila = Convert.ToInt32((dgvNuevoRemito.CurrentRow.Index).ToString());
            dgvNuevoRemito.Rows.RemoveAt(fila);
            dgvNuevoRemito.Refresh();
        }

        private void btnEditarCantArtRem_Click(object sender, EventArgs e)
        {
            int ID = Convert.ToInt32(dgvNuevoRemito[0, dgvNuevoRemito.CurrentRow.Index].Value.ToString());
            int fila = dgvNuevoRemito.CurrentRow.Index;
           
            string Articulo = Convert.ToString(dgvNuevoRemito[2, dgvNuevoRemito.CurrentRow.Index].Value.ToString());


            if (PrimeraVez)
            {
                saldo = Convert.ToInt32(dgvNuevoRemito[5, dgvNuevoRemito.CurrentRow.Index].Value.ToString());
                PrimeraVez = false;
                FrmModifCantRemito FrmModifCantRemito = new FrmModifCantRemito(ID, saldo, Articulo);
                FrmModifCantRemito.ShowDialog();
            }
            else
            {
                FrmModifCantRemito FrmModifCantRemito = new FrmModifCantRemito(ID, saldo, Articulo);
                FrmModifCantRemito.ShowDialog();
            }
            dgvNuevoRemito[5, fila].Value = nuevacant;
            dgvNuevoRemito.Refresh();
            
            }

        Int64 obtenerNumeroRemitoVA()
        {
            if ((context.RemitoVA.Count()) == 0)
                return 1;
            else
                return context.RemitoVA.Max(va => va.numero) + 1;
        }

        private void btnGuardarRemito_Click(object sender, EventArgs e)
        {
            context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);
            // Creo el Datatable p imprimir
            dtLineaImpresionRemito = new DataTable();
            dtLineaImpresionRemito.Columns.Add("Codigo Art.");
            dtLineaImpresionRemito.Columns.Add("Articulo");
            dtLineaImpresionRemito.Columns.Add("Cantidad");
            bool autorizado = false;
            bool existenceros = false;

            for (int w = 0; w < dgvNuevoRemito.Rows.Count; w++)
             {
                if (Convert.ToInt32(dgvNuevoRemito[5, w].Value) == 0)
                    existenceros = true;
             }

            if (existenceros) // Controla q no hayan cantidades en 0
            {
                MessageBox.Show("Existe una cantidad en 0", "Disanco Sanitarios", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                if (Convert.ToInt32(dgvNuevoRemito.Rows.Count) == 0)
                {
                    MessageBox.Show("Debe Completar las lineas del Remito"); //Controla q hayan lineas en el remito
                }
                else
                {
                    //int nroLineas = dgvNuevoRemito.Rows.Count;
                    //int maxLineas = Clases.Constantes.maximoLineasRemito;

                    ////Calculo de la cant de remitos necesarios
                    //cantRemitos = 1;
                    //while (nroLineas > maxLineas)
                    //{
                    //    cantRemitos += 1;
                    //    nroLineas -= maxLineas;
                    //}
                    //cantRemRestantes = cantRemitos;
                    //Se busca una autorizacion valida, y se generan los
                    //numeros de remito inicial y final, controlando que
                    //el final no exceda el limite de la autorizacion

                    numeroRemitoInicial = 0;

                    foreach (var auth in context.Autorizaciones)
                    {
                        if (auth.autorizacion_tipo_comp.Equals("R"))
                        {
                            if (auth.autorizacion_estado)
                            {
                                if (auth.autorizacion_limite_fecha.Date > DateTime.Now.Date)
                                {
                                    autorizacionId = auth.autorizacion_id;
                                    numeroRemitoInicial = auth.autorizacion_ultimo_numero + 1;
                                    //numeroRemitoFinal = numeroRemitoInicial + cantRemitos - 1; // controlarrrrrrr q ande bien
                                    numeroRemitoFinal = numeroRemitoInicial;
                                    if (numeroRemitoFinal > auth.autorizacion_limite_max)
                                    {
                                        MessageBox.Show("Se exedio el limite de Nros. de Remito");
                                    }
                                    else
                                    {
                                        autorizado = true;
                                    }
                                    break;
                                }
                                else
                                {
                                    MessageBox.Show("La Fecha Actual exedio la Fecha autorizada para emitir Remitos");
                                    break;
                                }
                            }
                            //else
                            //    MessageBox.Show("No existen Autorizaciones Validas para generar Remitos");
                            //   break;
                       } }
                    }
            }
        
            if (TipoRemito == "R")
            {
                if (autorizado)
                {
                    RemitoV RemitoNuevo = new RemitoV();

                    RemitoNuevo.id_venta = VentaID;
                    RemitoNuevo.remito_fecha = DateTime.Now;
                    RemitoNuevo.remito_nro_inicio = numeroRemitoInicial;
                    RemitoNuevo.remito_nro_fin = numeroRemitoInicial;
                    RemitoNuevo.remito_estado = Clases.Estado.Emitida;

                    for (int j = 0; j < dgvNuevoRemito.Rows.Count; j++)
                    {
                        RemitoLinea NuevaLineaRemito = new RemitoLinea();
                        // Cargo el Datatable p imprimir
                        DataRow filaLnRemitoImpresion = dtLineaImpresionRemito.NewRow();

                        NuevaLineaRemito.art_id = Convert.ToInt32(dgvNuevoRemito[0, j].Value);
                        NuevaLineaRemito.remlinea_cantidad = Convert.ToInt32(dgvNuevoRemito[5, j].Value);
                        filaLnRemitoImpresion["Codigo Art."] = Convert.ToInt32(dgvNuevoRemito[1, j].Value);
                        filaLnRemitoImpresion["Articulo"] = dgvNuevoRemito[2, j].Value;
                        filaLnRemitoImpresion["Cantidad"] = Convert.ToInt32(dgvNuevoRemito[5, j].Value);

                        RemitoNuevo.RemitoLinea.Add(NuevaLineaRemito);
                        dtLineaImpresionRemito.Rows.Add(filaLnRemitoImpresion);
                    }
                    Autorizaciones Autoriz = context.Autorizaciones.FirstOrDefault(a => a.autorizacion_id.Equals(autorizacionId));
                    Autoriz.autorizacion_ultimo_numero = numeroRemitoFinal;

                    context.RemitoV.AddObject(RemitoNuevo);
                    context.SaveChanges();
                    MessageBox.Show("Remito Generado Correctamente", "Disanco Sanitarios", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    this.Close();
                    RemitoImprimir = RemitoNuevo;
                    imprimir();
                }
            }
            else // Remito de Comprobante X
            {
                RemitoVA RemitoNuevoVA = new RemitoVA();

                RemitoNuevoVA.va_id = VentaID;
                RemitoNuevoVA.fecha = DateTime.Now;
                RemitoNuevoVA.numero = obtenerNumeroRemitoVA(); //asiganr el numero q tiene q llevar
                RemitoNuevoVA.estado = Clases.Estado.Emitida;

                for (int j = 0; j < dgvNuevoRemito.Rows.Count; j++)
                {
                    LineaRemitoVA NuevaLineaRemito = new LineaRemitoVA();
                    // Cargo el Datatable p imprimir
                    DataRow filaLnRemitoImpresion = dtLineaImpresionRemito.NewRow();
                    NuevaLineaRemito.art_id = Convert.ToInt32(dgvNuevoRemito[0, j].Value);
                    NuevaLineaRemito.cantidad = Convert.ToInt32(dgvNuevoRemito[5, j].Value);
                    filaLnRemitoImpresion["Codigo Art."] = Convert.ToInt32(dgvNuevoRemito[1, j].Value);
                    filaLnRemitoImpresion["Articulo"] = dgvNuevoRemito[2, j].Value;
                    filaLnRemitoImpresion["Cantidad"] = Convert.ToInt32(dgvNuevoRemito[5, j].Value);
                    RemitoNuevoVA.LineaRemitoVA.Add(NuevaLineaRemito);
                    dtLineaImpresionRemito.Rows.Add(filaLnRemitoImpresion);
                }
                context.RemitoVA.AddObject(RemitoNuevoVA);
                context.SaveChanges();

                MessageBox.Show("Remito Generado Correctamente","Disanco Sanitarios",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
                this.Close();
                RemitoImprimirVA = RemitoNuevoVA;
                imprimir();
            }
            this.Close();
            
        }
       
        private void toolStripButton2_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private Font printFont = new Font("Calibri", 9);
        private Font miniprintFont = new Font("Calibri", 8);
        private Font printFontTit = new Font("Calibri", 11);

        private void imprimir()
        {
            if (TipoRemito == "R")
                NroRemito = RemitoImprimir.remito_nro_inicio;
            else
                NroRemito = RemitoImprimirVA.numero;

            DialogResult resultadounico = printDialog.ShowDialog();

                if (resultadounico == DialogResult.OK)
                {
                    pdRemitoUnico.PrinterSettings.Copies = 3;
                    pdRemitoUnico.PrinterSettings = printDialog.PrinterSettings;
                    printPrevDRemito.Document = pdRemitoUnico;
                    ((Form)printPrevDRemito).WindowState = FormWindowState.Maximized;
                    printPrevDRemito.ShowDialog();
                }
          }

        private void pdRemitoUnico_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);
            StringFormat formato = new StringFormat();
            formato.Alignment = StringAlignment.Center;
            if (TipoRemito == "R")
            {
                string remitonro = NroRemito.ToString();
                string fecha = RemitoImprimir.remito_fecha.Date.ToString("dd/MM/yyyy");
                e.Graphics.DrawString(remitonro.Substring(1, 8), printFontTit, Brushes.Black, 585, 43);
                e.Graphics.DrawLine(Pens.Black, 580, 52, 583, 52);
                e.Graphics.DrawString("Fecha:", printFontTit, Brushes.Black, 500, 75);
                e.Graphics.DrawString(fecha, printFontTit, Brushes.Black, 570, 75);
                
                e.Graphics.DrawString(RemitoImprimir.Ventas.Clientes.cliente_nombre, printFont, Brushes.Black, 130, 186);
                e.Graphics.DrawString(RemitoImprimir.Ventas.Clientes.cliente_direccion, printFont, Brushes.Black, 130, 201);
                e.Graphics.DrawString(RemitoImprimir.Ventas.Clientes.cliente_localidad, printFont, Brushes.Black, 550, 201);
                e.Graphics.DrawString(RemitoImprimir.Ventas.Clientes.CondicionIVA.condicion_sigla, printFont, Brushes.Black, 130, 216);
                e.Graphics.DrawString(RemitoImprimir.Ventas.Clientes.cliente_cuit, printFont, Brushes.Black, 550, 216);
            
            }
            else
            {
                e.Graphics.DrawString("Documento No Valido Como Factura", printFontTit, Brushes.Black, 310, 20);
                e.Graphics.DrawString(" RX ", printFontTit, Brushes.Black, 400, 7);
                
                string comprobnumero = RemitoImprimirVA.numero.ToString("0000-00000000");
                e.Graphics.DrawString(comprobnumero, printFontTit, Brushes.Black, 625, 43,formato);
                e.Graphics.DrawString("Número:", printFontTit, Brushes.Black, 520, 40, formato);

                string fecha = DateTime.Now.Date.ToString("dd/MM/yyyy");
                e.Graphics.DrawString("Fecha:", printFontTit, Brushes.Black, 500, 75);
                e.Graphics.DrawString(fecha, printFontTit, Brushes.Black, 570, 75);

                e.Graphics.DrawString(RemitoImprimirVA.VentasAdicionales.Clientes.cliente_nombre, printFont, Brushes.Black, 130, 186);
                e.Graphics.DrawString(RemitoImprimirVA.VentasAdicionales.Clientes.cliente_direccion, printFont, Brushes.Black, 130, 201);
                e.Graphics.DrawString(RemitoImprimirVA.VentasAdicionales.Clientes.cliente_localidad, printFont, Brushes.Black, 550, 201);
                e.Graphics.DrawString(RemitoImprimirVA.VentasAdicionales.Clientes.CondicionIVA.condicion_sigla, printFont, Brushes.Black, 130, 216);
                e.Graphics.DrawString(RemitoImprimirVA.VentasAdicionales.Clientes.cliente_cuit, printFont, Brushes.Black, 550, 216);
            }
          

            e.Graphics.DrawString("Cliente:", printFont, Brushes.Black, 90, 186, formato);
            e.Graphics.DrawString("Dirección:", printFont, Brushes.Black, 80, 201, formato);
            e.Graphics.DrawString("Localidad:", printFont, Brushes.Black, 500, 201, formato);
            e.Graphics.DrawString("Cond. IVA:", printFont, Brushes.Black, 80, 216, formato);
            e.Graphics.DrawString("CUIT:", printFont, Brushes.Black, 515, 216, formato);
            
            //e.Graphics.DrawString("Factura:", printFont, Brushes.Black, 80, 250, formato);
            //string comp = lblNVOcomptipo.Text + " " + lblNVOCompNro.Text.ToString();
            //e.Graphics.DrawString(comp, printFont, Brushes.Black, 180, 250, formato);

            int Yencabezado = 275;

            String Cant = "Cantidad";
            e.Graphics.DrawString(Cant, printFont, Brushes.Black, 47, Yencabezado);
            String Cod = "Codigo Art.";
            e.Graphics.DrawString(Cod, printFont, Brushes.Black, 132, Yencabezado);
            String Art = "Articulo";
            e.Graphics.DrawString(Art, printFont, Brushes.Black, 368, Yencabezado);

            int posY = Yencabezado + 20;
            int anchoLinea = 20;
            int posCantidad = 50 + 15;
            int posCod = posCantidad + 72;
            int posArticulo = posCod + 100;

            foreach (DataRow fila in dtLineaImpresionRemito.Rows)
            {
                e.Graphics.DrawString(fila["Cantidad"].ToString(), miniprintFont, Brushes.Black, posCantidad, posY);
                e.Graphics.DrawString(fila["Codigo Art."].ToString(), miniprintFont, Brushes.Black, posCod, posY);
                e.Graphics.DrawString(fila["Articulo"].ToString(), miniprintFont, Brushes.Black, posArticulo, posY);
                posY += anchoLinea;
            }
         
        int lineafin = 995;
        int posSubtotX = 70;

        String firma = "Recibí Conforme:.........................";
        e.Graphics.DrawString(firma, printFontTit, Brushes.Black, posSubtotX, lineafin);

        String aclaracion = "Aclaración:...........................................";
        e.Graphics.DrawString(aclaracion, printFontTit, Brushes.Black, posSubtotX + 450, lineafin);
        
        }

        private void toolStripButton2_Click_1(object sender, EventArgs e)
        {
            this.Close();
        }


    }
}
